namespace fun {
  // 如果函数的某个参数可以省略，则在参数名后面加问号表示
  // ，参数x是可选的，等同于说x可以赋值为undefined。
  function f(x?: number) {
    // ...
  }

  f(); // OK
  f(10); // OK
  f(undefined); // 正确
  // 反过来就不成立，类型显式设为undefined的参数，就不能省略。
  function fe(x: number | undefined) {
    return x;
  }

  // fe();//报错

  // 函数的可选参数只能在参数列表的尾部，跟在必选参数的后面。
  // let myFunc: (a?: number, b: number) => number; // 报错

  // 参数的默认值    可选参数与默认值不能同时使用。  last?:string='名'   函数参数也存在只读 只用于数组和元祖
  function FullName(first: readonly string[], last: string = "名") {
    // first[0]='56' 报错只读
  }
  FullName(["姓"]);

  function ggg(first: number, second?: string) {
    if (second) {
      return first + second;
    } else {
      return first;
    }
  }
}


